package com.lvt.design.pattern.action.observer.eventbus;

import com.google.common.base.Preconditions;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * desc：表示@Subscribe注解的方法，其中，
 * target 表示观察者类，method表示方法。
 * 主要用在ObserverRegistry 观察者注册表中
 *
 * @author LT
 * @date 2022/12/4
 */
public class ObserverAction {
    private Object target;
    private Method method;

    public ObserverAction(Object target, Method method) {
        // 校验target不能为空省略
        this.target = Preconditions.checkNotNull(target);
        this.method = method;
        this.method.setAccessible(true);
    }

    // event 是method的参数
    public void execute(Object event) {
        try{
            method.invoke(target, event);
        } catch (InvocationTargetException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }

}
